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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/README.md +6 -3
- data/bin/check-node +0 -1
- data/bin/deploy +0 -1
- data/bin/get_impacted_nodes +0 -1
- data/bin/last_deploys +12 -8
- data/bin/nodes_to_deploy +6 -6
- data/bin/setup +6 -6
- data/bin/topograph +1 -1
- data/docs/config_dsl.md +45 -1
- data/docs/executables.md +6 -7
- data/docs/executables/check-node.md +3 -3
- data/docs/executables/deploy.md +3 -3
- data/docs/executables/dump_nodes_json.md +3 -3
- data/docs/executables/test.md +3 -3
- data/docs/executables/topograph.md +3 -3
- data/docs/gen/mermaid/README.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
- data/docs/plugins.md +46 -0
- data/docs/plugins/connector/ssh.md +1 -1
- data/docs/plugins/log/remote_fs.md +26 -0
- data/docs/plugins/secrets_reader/cli.md +31 -0
- data/docs/plugins/secrets_reader/thycotic.md +46 -0
- data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
- data/docs/plugins/test/connection.md +1 -0
- data/docs/plugins/test/deploy_removes_root_access.md +1 -1
- data/docs/plugins/test/file_system.md +1 -0
- data/docs/plugins/test/hostname.md +1 -0
- data/docs/plugins/test/ip.md +1 -0
- data/docs/plugins/test/local_users.md +1 -0
- data/docs/plugins/test/mounts.md +1 -0
- data/docs/plugins/test/orphan_files.md +1 -0
- data/docs/plugins/test/ports.md +1 -0
- data/docs/plugins/test/spectre.md +1 -0
- data/docs/plugins/test/vulnerabilities.md +1 -0
- data/lib/hybrid_platforms_conductor/action.rb +4 -4
- data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
- data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
- data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
- data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
- data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
- data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
- data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
- data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
- data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
- data/lib/hybrid_platforms_conductor/config.rb +8 -4
- data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
- data/lib/hybrid_platforms_conductor/connector.rb +5 -2
- data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
- data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
- data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
- data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
- data/lib/hybrid_platforms_conductor/deployer.rb +275 -224
- data/lib/hybrid_platforms_conductor/executable.rb +20 -15
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
- data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +21 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +13 -10
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +7 -7
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +27 -25
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
- data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
- data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
- data/lib/hybrid_platforms_conductor/log.rb +31 -0
- data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
- data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
- data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
- data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
- data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
- data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
- data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
- data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
- data/lib/hybrid_platforms_conductor/report.rb +2 -2
- data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
- data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
- data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
- data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
- data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
- data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
- data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
- data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
- data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
- data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- data/spec/hybrid_platforms_conductor_test.rb +33 -12
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
- data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
- data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
- data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
- data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
- data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
- data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
- data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
- data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
- data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
- data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
- data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
- data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
- data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
- data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
- data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
- data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
- data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
- data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
- data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
- data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
- data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
- data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
- data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
- data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
- data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
- data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
- data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
- data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
- data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
- data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
- data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
- data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
- 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
- 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
- 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
- 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
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
- data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
- data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
- data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
- data/spec/spec_helper.rb +17 -18
- data/tools/check_md +16 -20
- data/tools/generate_mermaid +1 -1
- metadata +195 -144
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
|
@@ -50,7 +50,7 @@ module HybridPlatformsConductor
|
|
|
50
50
|
# Result::
|
|
51
51
|
# * Array<Test>: List of platform tests
|
|
52
52
|
def platform_tests
|
|
53
|
-
@tests.
|
|
53
|
+
@tests.reject { |test| test.platform.nil? }
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Return node tests
|
|
@@ -58,7 +58,7 @@ module HybridPlatformsConductor
|
|
|
58
58
|
# Result::
|
|
59
59
|
# * Array<Test>: List of node tests
|
|
60
60
|
def node_tests
|
|
61
|
-
@tests.
|
|
61
|
+
@tests.reject { |test| test.node.nil? }
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
# Select tests corresponding to a given criteria
|
|
@@ -144,7 +144,7 @@ module HybridPlatformsConductor
|
|
|
144
144
|
when :only_as_expected
|
|
145
145
|
test.expected_failure ? test.errors : []
|
|
146
146
|
when :only_as_non_expected
|
|
147
|
-
|
|
147
|
+
test.expected_failure ? [] : test.errors
|
|
148
148
|
else
|
|
149
149
|
raise "Unknown errors filter: #{fiter}"
|
|
150
150
|
end
|
|
@@ -166,10 +166,10 @@ module HybridPlatformsConductor
|
|
|
166
166
|
end
|
|
167
167
|
groups = {}
|
|
168
168
|
tests.group_by(&first_criteria).each do |first_group, grouped_tests|
|
|
169
|
-
next_grouped_errors = group_errors(grouped_tests, *group_criterias[1
|
|
169
|
+
next_grouped_errors = group_errors(grouped_tests, *group_criterias[1..], filter: filter)
|
|
170
170
|
groups[first_group] = next_grouped_errors unless next_grouped_errors.empty?
|
|
171
171
|
end
|
|
172
|
-
|
|
172
|
+
groups.sort.to_h
|
|
173
173
|
end
|
|
174
174
|
end
|
|
175
175
|
|
|
@@ -184,7 +184,7 @@ module HybridPlatformsConductor
|
|
|
184
184
|
# * *tested_nodes_in_error_as_expected* (Array<String>): Tested nodes in error in the list that are part of the expected failures
|
|
185
185
|
def nodes_by_nodes_list
|
|
186
186
|
no_list_nodes = @nodes_handler.known_nodes
|
|
187
|
-
|
|
187
|
+
(
|
|
188
188
|
@nodes_handler.known_nodes_lists.sort.map do |nodes_list|
|
|
189
189
|
nodes_from_list = @nodes_handler.nodes_from_list(nodes_list, ignore_unknowns: true)
|
|
190
190
|
no_list_nodes -= nodes_from_list
|
|
@@ -193,17 +193,14 @@ module HybridPlatformsConductor
|
|
|
193
193
|
['No list', no_list_nodes],
|
|
194
194
|
['All', @nodes_handler.known_nodes]
|
|
195
195
|
]
|
|
196
|
-
).
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
]
|
|
206
|
-
end]
|
|
196
|
+
).to_h.transform_values do |list_nodes|
|
|
197
|
+
{
|
|
198
|
+
nodes: list_nodes,
|
|
199
|
+
tested_nodes: list_nodes & @tested_nodes,
|
|
200
|
+
tested_nodes_in_error: list_nodes & group_errors(node_tests, :node).keys,
|
|
201
|
+
tested_nodes_in_error_as_expected: list_nodes & group_errors(node_tests, :node, filter: :only_as_expected).keys
|
|
202
|
+
}
|
|
203
|
+
end
|
|
207
204
|
end
|
|
208
205
|
|
|
209
206
|
# Flatten a tree hash.
|
|
@@ -259,7 +256,7 @@ module HybridPlatformsConductor
|
|
|
259
256
|
# * *not_run*: All non-successful tests have not been run
|
|
260
257
|
def classify_tests(tests)
|
|
261
258
|
info = {
|
|
262
|
-
not_run: tests.
|
|
259
|
+
not_run: tests.reject(&:executed?),
|
|
263
260
|
success: tests.select { |test| test.executed? && test.errors.empty? },
|
|
264
261
|
unexpected_error: tests.select { |test| test.executed? && !test.errors.empty? && test.expected_failure.nil? },
|
|
265
262
|
expected_error: tests.select { |test| test.executed? && !test.errors.empty? && !test.expected_failure.nil? }
|
|
@@ -12,7 +12,8 @@ module HybridPlatformsConductor
|
|
|
12
12
|
# Class running tests
|
|
13
13
|
class TestsRunner
|
|
14
14
|
|
|
15
|
-
include
|
|
15
|
+
include ParallelThreads
|
|
16
|
+
include LoggerHelpers
|
|
16
17
|
|
|
17
18
|
# List of tests to execute [default: []]
|
|
18
19
|
# Array<Symbol>
|
|
@@ -50,8 +51,8 @@ module HybridPlatformsConductor
|
|
|
50
51
|
# * *actions_executor* (ActionsExecutor): Actions Executor to be used for the tests [default: ActionsExecutor.new]
|
|
51
52
|
# * *deployer* (Deployer): Deployer to be used for the tests needed why-run deployments [default: Deployer.new]
|
|
52
53
|
def initialize(
|
|
53
|
-
logger: Logger.new(
|
|
54
|
-
logger_stderr: Logger.new(
|
|
54
|
+
logger: Logger.new($stdout),
|
|
55
|
+
logger_stderr: Logger.new($stderr),
|
|
55
56
|
config: Config.new,
|
|
56
57
|
cmd_runner: CmdRunner.new,
|
|
57
58
|
platforms_handler: PlatformsHandler.new,
|
|
@@ -74,10 +75,10 @@ module HybridPlatformsConductor
|
|
|
74
75
|
@reports_plugins = Plugins.new(:test_report, logger: @logger, logger_stderr: @logger_stderr)
|
|
75
76
|
# Register test classes from platforms
|
|
76
77
|
@platforms_handler.known_platforms.each do |platform|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
next unless platform.respond_to?(:tests)
|
|
79
|
+
|
|
80
|
+
platform.tests.each do |test_name, test_class|
|
|
81
|
+
@tests_plugins[test_name] = test_class
|
|
81
82
|
end
|
|
82
83
|
end
|
|
83
84
|
# Do we skip running check-node?
|
|
@@ -146,6 +147,7 @@ module HybridPlatformsConductor
|
|
|
146
147
|
@reports.sort!
|
|
147
148
|
unknown_tests = @tests - @tests_plugins.keys
|
|
148
149
|
raise "Unknown test names: #{unknown_tests.join(', ')}" unless unknown_tests.empty?
|
|
150
|
+
|
|
149
151
|
@nodes = @nodes_handler.select_nodes(nodes_selectors).uniq.sort
|
|
150
152
|
|
|
151
153
|
# Resolve the expected failures from the config.
|
|
@@ -173,11 +175,11 @@ module HybridPlatformsConductor
|
|
|
173
175
|
@platforms_handler.known_platforms.each do |platform|
|
|
174
176
|
platform_nodes = platform.known_nodes
|
|
175
177
|
@node_expected_failures.each do |test_name, expected_failures_for_test|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
next unless (platform_nodes - expected_failures_for_test.keys).empty?
|
|
179
|
+
|
|
180
|
+
# We have an expected failure for this test
|
|
181
|
+
@platform_expected_failures[test_name] = {} unless @platform_expected_failures.key?(test_name)
|
|
182
|
+
@platform_expected_failures[test_name][platform.name] = expected_failures_for_test.values.uniq.join(' + ')
|
|
181
183
|
end
|
|
182
184
|
end
|
|
183
185
|
|
|
@@ -191,24 +193,24 @@ module HybridPlatformsConductor
|
|
|
191
193
|
run_tests_connection_on_nodes
|
|
192
194
|
run_tests_on_check_nodes
|
|
193
195
|
|
|
194
|
-
@tested_platforms = @tests_run.map
|
|
196
|
+
@tested_platforms = @tests_run.map(&:platform).compact.uniq.sort
|
|
195
197
|
|
|
196
198
|
# Check that tests that were expected to fail did not succeed.
|
|
197
199
|
@tests_run.each do |test|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
200
|
+
next unless test.executed?
|
|
201
|
+
|
|
202
|
+
expected_failure = test.expected_failure
|
|
203
|
+
if expected_failure
|
|
204
|
+
if test.errors.empty?
|
|
205
|
+
# Should have failed
|
|
206
|
+
error(
|
|
207
|
+
"Test #{test} was marked to fail (#{expected_failure}) but it succeeded. Please remove it from the expected failures in case the issue has been resolved.",
|
|
208
|
+
platform: test.platform,
|
|
209
|
+
node: test.node,
|
|
210
|
+
force_failure: true
|
|
211
|
+
)
|
|
212
|
+
else
|
|
213
|
+
out "Expected failure for #{test} (#{expected_failure}):\n#{test.errors.map { |error| " - #{error}" }.join("\n")}".yellow
|
|
212
214
|
end
|
|
213
215
|
end
|
|
214
216
|
end
|
|
@@ -217,14 +219,12 @@ module HybridPlatformsConductor
|
|
|
217
219
|
@node_expected_failures.each do |test_name, test_expected_failures|
|
|
218
220
|
test_expected_failures.each do |node, expected_failure|
|
|
219
221
|
# Check that a test has been run for this expected failure
|
|
220
|
-
unless @tests_run.find do |test|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
end
|
|
227
|
-
error("A test named #{test_name} for node #{node} was expected to fail (#{expected_failure}), but no test has been run. Please remove it from the expected failures if this expected failure is obsolete.")
|
|
222
|
+
error("A test named #{test_name} for node #{node} was expected to fail (#{expected_failure}), but no test has been run. Please remove it from the expected failures if this expected failure is obsolete.") unless @tests_run.find do |test|
|
|
223
|
+
test.name == test_name &&
|
|
224
|
+
(
|
|
225
|
+
(test.node.nil? && node == '') ||
|
|
226
|
+
(!test.node.nil? && node == test.node)
|
|
227
|
+
)
|
|
228
228
|
end
|
|
229
229
|
end
|
|
230
230
|
end
|
|
@@ -232,11 +232,9 @@ module HybridPlatformsConductor
|
|
|
232
232
|
|
|
233
233
|
# Produce reports
|
|
234
234
|
@reports.each do |report|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
log_error "Uncaught exception while producing report #{report}: #{$!}\n#{$!.backtrace.join("\n")}"
|
|
239
|
-
end
|
|
235
|
+
@reports_plugins[report].new(@logger, @logger_stderr, @config, @nodes_handler, @nodes, @tested_platforms, @tests_run).report
|
|
236
|
+
rescue
|
|
237
|
+
log_error "Uncaught exception while producing report #{report}: #{$ERROR_INFO}\n#{$ERROR_INFO.backtrace.join("\n")}"
|
|
240
238
|
end
|
|
241
239
|
|
|
242
240
|
out
|
|
@@ -285,6 +283,9 @@ module HybridPlatformsConductor
|
|
|
285
283
|
name: test_name.nil? ? :global : test_name,
|
|
286
284
|
platform: platform,
|
|
287
285
|
node: node,
|
|
286
|
+
# Keep this else on purpose to show where global tests could have expected failures
|
|
287
|
+
# rubocop:disable Style/EmptyElse
|
|
288
|
+
# rubocop:disable Lint/DuplicateBranch
|
|
288
289
|
expected_failure: if ignore_expected_failure
|
|
289
290
|
nil
|
|
290
291
|
elsif !node.nil?
|
|
@@ -297,6 +298,8 @@ module HybridPlatformsConductor
|
|
|
297
298
|
# Global test
|
|
298
299
|
nil
|
|
299
300
|
end
|
|
301
|
+
# rubocop:enable Lint/DuplicateBranch
|
|
302
|
+
# rubocop:enable Style/EmptyElse
|
|
300
303
|
)
|
|
301
304
|
end
|
|
302
305
|
|
|
@@ -333,38 +336,38 @@ module HybridPlatformsConductor
|
|
|
333
336
|
[]
|
|
334
337
|
end
|
|
335
338
|
end.flatten
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
out "[ #{Time.now.utc.strftime('%F %T')} ] - [ #{test_category} ] - [ #{test.name} ] - Start test..."
|
|
356
|
-
begin_time = Time.now
|
|
357
|
-
begin
|
|
358
|
-
test_execution.call(test)
|
|
359
|
-
rescue
|
|
360
|
-
test.error "Uncaught exception during test: #{$!}", $!.backtrace.join("\n")
|
|
339
|
+
return if tests_to_run.empty?
|
|
340
|
+
|
|
341
|
+
section "Run #{tests_to_run.size} #{title}" do
|
|
342
|
+
tests_preparation&.call(tests_to_run)
|
|
343
|
+
for_each_element_in(
|
|
344
|
+
tests_to_run,
|
|
345
|
+
parallel: !log_debug? && nbr_threads_max > 1,
|
|
346
|
+
nbr_threads_max: nbr_threads_max,
|
|
347
|
+
progress: "Run #{title}"
|
|
348
|
+
) do |test|
|
|
349
|
+
test_category =
|
|
350
|
+
if test.platform.nil? && test.node.nil?
|
|
351
|
+
'Global'
|
|
352
|
+
elsif test.node.nil?
|
|
353
|
+
"Platform #{test.platform.name}"
|
|
354
|
+
elsif test.platform.nil?
|
|
355
|
+
"Node #{test.node}"
|
|
356
|
+
else
|
|
357
|
+
"Platform #{test.platform.name} / Node #{test.node}"
|
|
361
358
|
end
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
359
|
+
out "[ #{Time.now.utc.strftime('%F %T')} ] - [ #{test_category} ] - [ #{test.name} ] - Start test..."
|
|
360
|
+
begin_time = Time.now
|
|
361
|
+
begin
|
|
362
|
+
test_execution.call(test)
|
|
363
|
+
rescue
|
|
364
|
+
test.error "Uncaught exception during test: #{$ERROR_INFO}", $ERROR_INFO.backtrace.join("\n")
|
|
365
365
|
end
|
|
366
|
-
|
|
366
|
+
end_time = Time.now
|
|
367
|
+
test.executed
|
|
368
|
+
out "[ #{Time.now.utc.strftime('%F %T')} ] - [ #{test_category} ] - [ #{test.name} ] - Test finished in #{end_time - begin_time} seconds."
|
|
367
369
|
end
|
|
370
|
+
@tests_run.concat(tests_to_run)
|
|
368
371
|
end
|
|
369
372
|
end
|
|
370
373
|
|
|
@@ -411,21 +414,19 @@ module HybridPlatformsConductor
|
|
|
411
414
|
# Hash< String, Array< [ String, Hash<Symbol,Object> ] > >
|
|
412
415
|
@cmds_to_run = {}
|
|
413
416
|
selected_tests.each do |test|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
]
|
|
424
|
-
end
|
|
425
|
-
rescue
|
|
426
|
-
test.error "Uncaught exception during test preparation: #{$!}", $!.backtrace.join("\n")
|
|
427
|
-
test.executed
|
|
417
|
+
test.test_on_node.each do |cmd, test_info|
|
|
418
|
+
test_info_normalized = test_info.is_a?(Hash) ? test_info.clone : { validator: test_info }
|
|
419
|
+
test_info_normalized[:timeout] = DEFAULT_CMD_TIMEOUT unless test_info_normalized.key?(:timeout)
|
|
420
|
+
test_info_normalized[:test] = test
|
|
421
|
+
@cmds_to_run[test.node] = [] unless @cmds_to_run.key?(test.node)
|
|
422
|
+
@cmds_to_run[test.node] << [
|
|
423
|
+
cmd,
|
|
424
|
+
test_info_normalized
|
|
425
|
+
]
|
|
428
426
|
end
|
|
427
|
+
rescue
|
|
428
|
+
test.error "Uncaught exception during test preparation: #{$ERROR_INFO}", $ERROR_INFO.backtrace.join("\n")
|
|
429
|
+
test.executed
|
|
429
430
|
end
|
|
430
431
|
# Compute the timeout that will be applied, from the max timeout sum for every node that has tests to run
|
|
431
432
|
timeout = CONNECTION_TIMEOUT + (
|
|
@@ -435,21 +436,18 @@ module HybridPlatformsConductor
|
|
|
435
436
|
)
|
|
436
437
|
# Run commands on nodes, in grouped way to avoid too many connections, per node
|
|
437
438
|
# Hash< String, Array<String> >
|
|
438
|
-
@test_cmds =
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
451
|
-
]
|
|
452
|
-
end]
|
|
439
|
+
@test_cmds = @cmds_to_run.transform_values do |cmds_list|
|
|
440
|
+
{
|
|
441
|
+
remote_bash: cmds_list.map do |(cmd, _test_info)|
|
|
442
|
+
[
|
|
443
|
+
"echo '#{CMD_SEPARATOR}'",
|
|
444
|
+
">&2 echo '#{CMD_SEPARATOR}'",
|
|
445
|
+
cmd,
|
|
446
|
+
'echo "$?"'
|
|
447
|
+
]
|
|
448
|
+
end.flatten
|
|
449
|
+
}
|
|
450
|
+
end
|
|
453
451
|
section "Run test commands on #{@test_cmds.keys.size} connected nodes (timeout to #{timeout} secs)" do
|
|
454
452
|
start_time = Time.now
|
|
455
453
|
@actions_executor.max_threads = @max_threads_connection_on_nodes
|
|
@@ -469,7 +467,7 @@ module HybridPlatformsConductor
|
|
|
469
467
|
if exit_status.is_a?(Symbol)
|
|
470
468
|
test.error "Error while executing tests: #{exit_status}: #{stderr}"
|
|
471
469
|
else
|
|
472
|
-
log_debug <<~
|
|
470
|
+
log_debug <<~EO_LOG
|
|
473
471
|
----- Commands for #{test.node}:
|
|
474
472
|
#{@test_cmds[test.node][:remote_bash].join("\n")}
|
|
475
473
|
----- STDOUT:
|
|
@@ -477,23 +475,23 @@ module HybridPlatformsConductor
|
|
|
477
475
|
----- STDERR:
|
|
478
476
|
#{stderr}
|
|
479
477
|
-----
|
|
480
|
-
|
|
478
|
+
EO_LOG
|
|
481
479
|
# Skip the first section, as it can contain SSH banners
|
|
482
|
-
cmd_stdouts = stdout.split("#{CMD_SEPARATOR}\n")[1
|
|
480
|
+
cmd_stdouts = stdout.split("#{CMD_SEPARATOR}\n")[1..]
|
|
483
481
|
cmd_stdouts = [] if cmd_stdouts.nil?
|
|
484
|
-
cmd_stderrs = stderr.split("#{CMD_SEPARATOR}\n")[1
|
|
482
|
+
cmd_stderrs = stderr.split("#{CMD_SEPARATOR}\n")[1..]
|
|
485
483
|
cmd_stderrs = [] if cmd_stderrs.nil?
|
|
486
484
|
@cmds_to_run[test.node].zip(cmd_stdouts, cmd_stderrs).each do |(cmd, test_info), cmd_stdout, cmd_stderr|
|
|
487
485
|
# Find the section that corresponds to this test
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
486
|
+
next unless test_info[:test] == test
|
|
487
|
+
|
|
488
|
+
cmd_stdout = '' if cmd_stdout.nil?
|
|
489
|
+
cmd_stderr = '' if cmd_stderr.nil?
|
|
490
|
+
stdout_lines = cmd_stdout.split("\n")
|
|
491
|
+
# Last line of stdout is the return code
|
|
492
|
+
return_code = stdout_lines.empty? ? :command_cant_run : Integer(stdout_lines.last)
|
|
493
|
+
test.error "Command '#{cmd}' returned error code #{return_code}", "----- STDOUT:\n#{stdout_lines[0..-2].join("\n")}\n----- STDERR:\n#{cmd_stderr}" unless return_code.zero?
|
|
494
|
+
test_info[:validator].call(stdout_lines[0..-2], cmd_stderr.split("\n"), return_code)
|
|
497
495
|
end
|
|
498
496
|
end
|
|
499
497
|
end
|
|
@@ -522,17 +520,17 @@ module HybridPlatformsConductor
|
|
|
522
520
|
:test_on_check_node,
|
|
523
521
|
@nodes.map { |node| { node: node } },
|
|
524
522
|
tests_preparation: proc do |selected_tests|
|
|
525
|
-
nodes_to_test = selected_tests.map
|
|
523
|
+
nodes_to_test = selected_tests.map(&:node).uniq.sort
|
|
526
524
|
@outputs =
|
|
527
525
|
if @skip_run
|
|
528
|
-
|
|
526
|
+
nodes_to_test.map do |node|
|
|
529
527
|
run_log_file_name = "#{@config.hybrid_platforms_dir}/run_logs/#{node}.stdout"
|
|
530
528
|
[
|
|
531
529
|
node,
|
|
532
530
|
# TODO: Find a way to also save stderr and the status code
|
|
533
|
-
[0, File.
|
|
531
|
+
[0, File.exist?(run_log_file_name) ? File.read(run_log_file_name) : nil, '']
|
|
534
532
|
]
|
|
535
|
-
end
|
|
533
|
+
end.to_h
|
|
536
534
|
else
|
|
537
535
|
# Why-run deploy on all nodes
|
|
538
536
|
@deployer.concurrent_execution = !log_debug?
|
|
@@ -543,7 +541,7 @@ module HybridPlatformsConductor
|
|
|
543
541
|
rescue
|
|
544
542
|
# If an exception occurred, make sure all concerned nodes are reporting the error
|
|
545
543
|
nodes_to_test.each do |node|
|
|
546
|
-
error "Error while checking check-node output: #{
|
|
544
|
+
error "Error while checking check-node output: #{$ERROR_INFO}#{log_debug? ? "\n#{$ERROR_INFO.backtrace.join("\n")}" : ''}", node: node
|
|
547
545
|
end
|
|
548
546
|
{}
|
|
549
547
|
end
|
|
@@ -556,11 +554,11 @@ module HybridPlatformsConductor
|
|
|
556
554
|
elsif stdout.is_a?(Symbol)
|
|
557
555
|
test.error "Check-node run failed: #{stdout}."
|
|
558
556
|
else
|
|
559
|
-
test.error "Check-node returned error code #{exit_status}" unless exit_status
|
|
557
|
+
test.error "Check-node returned error code #{exit_status}" unless exit_status.zero?
|
|
560
558
|
begin
|
|
561
559
|
test.test_on_check_node(stdout, stderr, exit_status)
|
|
562
560
|
rescue
|
|
563
|
-
test.error "Uncaught exception during test: #{
|
|
561
|
+
test.error "Uncaught exception during test: #{$ERROR_INFO}", $ERROR_INFO.backtrace.join("\n")
|
|
564
562
|
end
|
|
565
563
|
end
|
|
566
564
|
end
|