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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Test that the hostname is correct
|
|
8
|
-
class Hostname <
|
|
10
|
+
class Hostname < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
11
13
|
def test_on_node
|
|
@@ -13,7 +13,7 @@ module HybridPlatformsConductor
|
|
|
13
13
|
# Don't forget to add the testadmin private key in your SSH agent if you run this test locally.
|
|
14
14
|
class Idempotence < TestByService
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
extend_config_dsl_with CommonConfigDsl::IdempotenceTests, :init_idempotence_tests
|
|
17
17
|
|
|
18
18
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
19
19
|
def test_for_node
|
|
@@ -21,7 +21,7 @@ module HybridPlatformsConductor
|
|
|
21
21
|
# First deploy as root
|
|
22
22
|
deployer.nbr_retries_on_error = 3
|
|
23
23
|
exit_status, _stdout, _stderr = deployer.deploy_on(@node)[@node]
|
|
24
|
-
if exit_status
|
|
24
|
+
if exit_status.zero?
|
|
25
25
|
# As it's possible sshd has to be restarted because of a change in its conf, restart the container.
|
|
26
26
|
# Otherwise you'll get the following error upon reconnection:
|
|
27
27
|
# System is booting up. See pam_nologin(8)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Test that the private IP address is correct
|
|
8
|
-
class Ip <
|
|
10
|
+
class Ip < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
11
13
|
def test_on_node
|
|
@@ -17,7 +19,7 @@ module HybridPlatformsConductor
|
|
|
17
19
|
else
|
|
18
20
|
private_ips = @nodes_handler.get_private_ips_of @node
|
|
19
21
|
if private_ips
|
|
20
|
-
host_ips = stdout.first.split
|
|
22
|
+
host_ips = stdout.first.split.select { |ip| ip =~ /^172\.16\.\d+\.\d+$/ }.sort
|
|
21
23
|
ref_ips = private_ips.sort
|
|
22
24
|
assert_equal(
|
|
23
25
|
host_ips,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'open-uri'
|
|
1
2
|
require 'nokogiri'
|
|
2
3
|
require 'hybrid_platforms_conductor/credentials'
|
|
3
4
|
require 'hybrid_platforms_conductor/common_config_dsl/bitbucket'
|
|
@@ -11,7 +12,7 @@ module HybridPlatformsConductor
|
|
|
11
12
|
# Check that all repositories have a correct Jenkins CI configuration.
|
|
12
13
|
class JenkinsCiConf < HybridPlatformsConductor::Test
|
|
13
14
|
|
|
14
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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(<<~
|
|
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
|
-
|
|
31
|
-
if
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
EO_BASH
|
|
31
|
+
next if stdout.empty?
|
|
32
|
+
|
|
33
|
+
_exit_status, stdout, _stderr = @cmd_runner.run_cmd(
|
|
34
|
+
"cd #{@platform.repository_path} && git --no-pager log #{merge_commit_id} --pretty=format:%aI",
|
|
35
|
+
log_to_stdout: log_debug?
|
|
36
|
+
)
|
|
37
|
+
error "Git history is not linear because of Merge commit #{merge_commit_id}" if Time.now - Time.parse(stdout.strip) < LOOKING_PERIOD
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Test that the node's local users
|
|
8
|
-
class LocalUsers <
|
|
10
|
+
class LocalUsers < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
# Config DSL extension for this test plugin
|
|
11
13
|
module ConfigDslExtension
|
|
@@ -22,7 +24,7 @@ module HybridPlatformsConductor
|
|
|
22
24
|
# Array< Hash<Symbol, Object> >
|
|
23
25
|
attr_reader :users_that_should_be_present
|
|
24
26
|
|
|
25
|
-
# Initialize the DSL
|
|
27
|
+
# Initialize the DSL
|
|
26
28
|
def init_local_users_test
|
|
27
29
|
@users_that_should_be_absent = []
|
|
28
30
|
@users_that_should_be_present = []
|
|
@@ -52,7 +54,7 @@ module HybridPlatformsConductor
|
|
|
52
54
|
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
extend_config_dsl_with ConfigDslExtension, :init_local_users_test
|
|
56
58
|
|
|
57
59
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
58
60
|
def test_on_node
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Various tests on mounts
|
|
8
|
-
class Mounts <
|
|
10
|
+
class Mounts < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
# Config DSL extension for this test plugin
|
|
11
13
|
module ConfigDslExtension
|
|
@@ -22,7 +24,7 @@ module HybridPlatformsConductor
|
|
|
22
24
|
# Array< Hash<Symbol, Object> >
|
|
23
25
|
attr_reader :mount_rules_that_should_be_present
|
|
24
26
|
|
|
25
|
-
# Initialize the DSL
|
|
27
|
+
# Initialize the DSL
|
|
26
28
|
def init_mounts_test
|
|
27
29
|
@mount_rules_that_should_be_absent = []
|
|
28
30
|
@mount_rules_that_should_be_present = []
|
|
@@ -56,7 +58,7 @@ module HybridPlatformsConductor
|
|
|
56
58
|
|
|
57
59
|
end
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
extend_config_dsl_with ConfigDslExtension, :init_mounts_test
|
|
60
62
|
|
|
61
63
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
62
64
|
def test_on_node
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Test that the node has no orphan files
|
|
8
|
-
class OrphanFiles <
|
|
10
|
+
class OrphanFiles < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
# Config DSL extension for this test plugin
|
|
11
13
|
module ConfigDslExtension
|
|
@@ -16,7 +18,7 @@ module HybridPlatformsConductor
|
|
|
16
18
|
# Array< Hash<Symbol, Object> >
|
|
17
19
|
attr_reader :ignored_orphan_files_paths
|
|
18
20
|
|
|
19
|
-
# Initialize the DSL
|
|
21
|
+
# Initialize the DSL
|
|
20
22
|
def init_orphan_files_test
|
|
21
23
|
# List of paths to ignore info. Each info has the following properties:
|
|
22
24
|
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
@@ -32,13 +34,13 @@ module HybridPlatformsConductor
|
|
|
32
34
|
def ignore_orphan_files_from(paths_to_ignore)
|
|
33
35
|
@ignored_orphan_files_paths << {
|
|
34
36
|
ignored_paths: paths_to_ignore.is_a?(Array) ? paths_to_ignore : [paths_to_ignore],
|
|
35
|
-
nodes_selectors_stack: current_nodes_selectors_stack
|
|
37
|
+
nodes_selectors_stack: current_nodes_selectors_stack
|
|
36
38
|
}
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
end
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
extend_config_dsl_with ConfigDslExtension, :init_orphan_files_test
|
|
42
44
|
|
|
43
45
|
# List of directories to always ignore
|
|
44
46
|
DIRECTORIES_TO_ALWAYS_IGNORE = [
|
|
@@ -51,12 +53,13 @@ module HybridPlatformsConductor
|
|
|
51
53
|
def test_on_node
|
|
52
54
|
{
|
|
53
55
|
# TODO: Access the user correctly when the user notion will be moved out of the ssh connector
|
|
54
|
-
"#{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/usr/bin/find / \\( #{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
"#{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/usr/bin/find / \\( #{
|
|
57
|
+
@nodes_handler.
|
|
58
|
+
select_confs_for_node(@node, @config.ignored_orphan_files_paths).
|
|
59
|
+
inject(DIRECTORIES_TO_ALWAYS_IGNORE) { |merged_paths, paths_to_ignore_info| merged_paths + paths_to_ignore_info[:ignored_paths] }.
|
|
60
|
+
uniq.
|
|
61
|
+
map { |dir| "-path #{dir}" }.
|
|
62
|
+
join(' -o ')
|
|
60
63
|
} \\) -prune -o -nogroup -nouser -print" => {
|
|
61
64
|
validator: proc do |stdout|
|
|
62
65
|
assert_equal stdout, [], "#{stdout.size} orphan files found.", stdout.join("\n")
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Various tests on ports
|
|
8
|
-
class Ports <
|
|
10
|
+
class Ports < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
# Config DSL extension for this test plugin
|
|
11
13
|
module ConfigDslExtension
|
|
@@ -19,7 +21,7 @@ module HybridPlatformsConductor
|
|
|
19
21
|
# Array< Hash<Symbol, Object> >
|
|
20
22
|
attr_reader :ports_rules
|
|
21
23
|
|
|
22
|
-
# Initialize the DSL
|
|
24
|
+
# Initialize the DSL
|
|
23
25
|
def init_ports_test
|
|
24
26
|
@ports_rules = []
|
|
25
27
|
end
|
|
@@ -50,7 +52,7 @@ module HybridPlatformsConductor
|
|
|
50
52
|
|
|
51
53
|
end
|
|
52
54
|
|
|
53
|
-
|
|
55
|
+
extend_config_dsl_with ConfigDslExtension, :init_ports_test
|
|
54
56
|
|
|
55
57
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
56
58
|
def test_for_node
|
|
@@ -11,15 +11,15 @@ module HybridPlatformsConductor
|
|
|
11
11
|
def test
|
|
12
12
|
# Get a map of private IPs per node
|
|
13
13
|
@nodes_handler.prefetch_metadata_of @nodes_handler.known_nodes, :private_ips
|
|
14
|
-
private_ips =
|
|
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,
|
|
22
|
-
|
|
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 =
|
|
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,
|
|
22
|
-
|
|
21
|
+
public_ips.each do |node, node_public_ips|
|
|
22
|
+
node_public_ips.each do |public_ip|
|
|
23
23
|
nodes_per_public_ip[public_ip] = [] unless nodes_per_public_ip.key?(public_ip)
|
|
24
24
|
nodes_per_public_ip[public_ip] << node
|
|
25
25
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/test_only_remote_node'
|
|
2
|
+
|
|
1
3
|
module HybridPlatformsConductor
|
|
2
4
|
|
|
3
5
|
module HpcPlugins
|
|
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
|
|
|
5
7
|
module Test
|
|
6
8
|
|
|
7
9
|
# Test that the vulnerabilities Spectre and Meltdown are patched
|
|
8
|
-
class Spectre <
|
|
10
|
+
class Spectre < TestOnlyRemoteNode
|
|
9
11
|
|
|
10
12
|
VULNERABILITIES_TO_CHECK = {
|
|
11
13
|
'CVE-2017-5753' => 'Spectre Variant 1',
|
|
@@ -15,11 +17,11 @@ module HybridPlatformsConductor
|
|
|
15
17
|
|
|
16
18
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
17
19
|
def test_on_node
|
|
18
|
-
spectre_cmd = <<~
|
|
20
|
+
spectre_cmd = <<~EO_BASH
|
|
19
21
|
#{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/bin/bash <<'EOAction'
|
|
20
22
|
#{File.read("#{__dir__}/spectre-meltdown-checker.sh")}
|
|
21
23
|
EOAction
|
|
22
|
-
|
|
24
|
+
EO_BASH
|
|
23
25
|
{
|
|
24
26
|
spectre_cmd => {
|
|
25
27
|
validator: proc do |stdout|
|
|
@@ -29,13 +31,11 @@ module HybridPlatformsConductor
|
|
|
29
31
|
if status_idx.nil?
|
|
30
32
|
error "Unable to find vulnerability section #{id}"
|
|
31
33
|
else
|
|
32
|
-
while !stdout[status_idx].nil? &&
|
|
33
|
-
status_idx += 1
|
|
34
|
-
end
|
|
34
|
+
status_idx += 1 while !stdout[status_idx].nil? && stdout[status_idx] !~ /STATUS:[^A-Z]+([A-Z ]+)/
|
|
35
35
|
if stdout[status_idx].nil?
|
|
36
36
|
error "Unable to find vulnerability status for #{id}"
|
|
37
37
|
else
|
|
38
|
-
status =
|
|
38
|
+
status = Regexp.last_match(1).strip
|
|
39
39
|
error "Status for #{name}: #{status}" if status != 'NOT VULNERABLE'
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -11,10 +11,10 @@ module HybridPlatformsConductor
|
|
|
11
11
|
def test
|
|
12
12
|
# Get a map of VEIDs per node
|
|
13
13
|
@nodes_handler.prefetch_metadata_of @nodes_handler.known_nodes, :veid
|
|
14
|
-
veids =
|
|
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|
|