hybrid_platforms_conductor 32.16.4 → 33.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -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 +47 -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/bitbucket_conf.md +1 -1
- 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/github_ci.md +48 -0
- data/docs/plugins/test/hostname.md +1 -0
- data/docs/plugins/test/ip.md +1 -0
- data/docs/plugins/test/jenkins_ci_conf.md +1 -1
- data/docs/plugins/test/jenkins_ci_masters_ok.md +1 -1
- 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 +63 -0
- data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
- data/lib/hybrid_platforms_conductor/config.rb +7 -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/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 +31 -0
- 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 +16 -11
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +23 -18
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +67 -49
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +20 -14
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +63 -50
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +35 -35
- 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 +73 -54
- 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 +106 -91
- 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 +10 -12
- 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 +72 -0
- 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 +82 -13
- 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
|